package com.dome.thread;
//线程案例消费者
public class Consumer implements Runnable {
    Medium medium;

    public Consumer(Medium medium) {
        this.medium = medium;
    }

    @Override
    public void run() {
        //假设消费者看到媒介中无商品,唤醒生产者,等待
        //如果有,那就拿到商品,将媒介中商品数量减一
        //当运行消费者这条线程时,用锁将线程锁住,直到消费者唤醒生产者
        while (true) {
            synchronized (medium.getLock()) {
                //当生产者已经完成任务,就停止生产,结束程序
                if (medium.getCount() == 0) {
                    break;
                } else {
                    //判断如有商品,消费者就拿,然后改变媒介中的状态,唤醒生产者
                    if (medium.isFalt()) {
                        System.out.println(Thread.currentThread().getName()+"拿到第:"+medium.getCount()+"个商品");
                        medium.setFalt(false);
                        //将媒介中商品数量减一
                        medium.setCount(medium.getCount()-1);
                        //打开消费者线程中的锁,唤醒生产者
                        medium.getLock().notifyAll();
                    }else {
                        //如无商品,消费者就等待
                        try {
                            medium.getLock().wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }
}